package com.project.projectdemo.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * List工具类
 * @author MECHREVO
 *
 */
public class ListUtils {


	/**
	 * 按时间类型排序
	 * @param list 需要排序的list，
	 * @param field 指定需要排序的字段，必须是Date的类型
	 * @param isAsc 是否升序
	 */
	public static void sortByDate(List<Map<String,Object>> list,String field,boolean isAsc){
    	//按时间排序
    	Collections.sort(list, new Comparator<Map<String,Object>>(){
			public int compare(Map<String,Object> map1, Map<String,Object> map2) {
				Date date1 = (Date) map1.get(field);
				Date date2 = (Date) map2.get(field);
				if(isAsc){
					if(date1.getTime()-date2.getTime()>0){
						return 1;
					}else if(date1.getTime()-date2.getTime()<0){
						return -1;
					}
				}else{
					if(date1.getTime()-date2.getTime()<0){
						return 1;
					}else if(date1.getTime()-date2.getTime()>0){
						return -1;
					}
				}
				
				return 0;
			}
		});
    }
	
	/**
	 * 按时间类型排序
	 * @param list 需要排序的list，
	 * @param field 指定需要排序的字段，必须是String类型的日期
	 * @param isAsc 是否升序
	 */
	public static void sortByDateString(List<Map<String,Object>> list,String field,boolean isAsc){
    	//按时间排序
    	Collections.sort(list, new Comparator<Map<String,Object>>(){
			public int compare(Map<String,Object> map1, Map<String,Object> map2) {
				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				try {
					Date date1 = format.parse(map1.get(field).toString());
					Date date2 = format.parse(map2.get(field).toString());
					if(isAsc){
						if(date1.getTime()-date2.getTime()>0){
							return 1;
						}else if(date1.getTime()-date2.getTime()<0){
							return -1;
						}
					}else{
						if(date1.getTime()-date2.getTime()<0){
							return 1;
						}else if(date1.getTime()-date2.getTime()>0){
							return -1;
						}
					}
				
				} catch (ParseException e) {
					e.printStackTrace();
					throw new RuntimeException("日期格式有问题");
				}
				
				return 0;
			}
		});
    }
	
	public static Map<Object,List<Map<String,Object>>> getMap(String key,List<Map<String,Object>> list){
		//返回的数据
		Map<Object,List<Map<String,Object>>> resMap = new HashMap<>();
		//循环处理
		for(int i=0;i<list.size();i++){
			//要分组的字段值
			Object value = list.get(i).get(key);
			//从map中取出属于该值的集合
			List<Map<String,Object>> list2 = resMap.get(value);
			//如果map里面还没有该值的集合，新建个list
			if(resMap.get(value)==null){
				list2 = new ArrayList<>();
			}
			//将本条数据存入集合中
			list2.add(list.get(i));
			resMap.put(value, list2);
		}
		return resMap;
	}
	
}
